//
//  SHStatus.swift
//  SHWeibo3
//
//  Created by teacher on 16/7/23.
//  Copyright © 2016年 teacher. All rights reserved.
//

import UIKit

class SHStatus: NSObject {
    // MARK: - 模型属性
    /// 创建时间
    var created_at: String?
    /// 微博ID
    var id: Int64 = 0
    /// 微博信息内容
    var text: String?
    /// 微博来源
    var source: String?{
        didSet{
            sourceAttr = getSourceStr(source)
        }
    }
    //  用户数据
    var user: SHUser?
    //  转发微博
    var retweeted_status:SHStatus?
    // 配图
    var pic_urls:[SHPictureInfo]?
    
    // 转发数
    var reposts_count: Int = 0
    // 评论数
    var comments_count: Int = 0
    // 表态数
    var attitudes_count: Int = 0
    
    // 微博来源处理富文本
    var sourceAttr: NSMutableAttributedString?
    
    // kvc构造函数
    init(dict:[String: AnyObject]) {
        super.init()
        setValuesForKeysWithDictionary(dict)
    }
    // 由于当前的kvc 构造函数 只能给其当前类的属性赋值 不知道user是一个模型 
     // - 结果方法
      //       - 程序员需要自己重写setValueForKey 方法
    override func setValue(value: AnyObject?, forKey key: String) {
        // 如果key == "user"
        if key == "user" {
            // 判断value 是否为nil  而且是否可以转成一个字典
            guard let v = value as? [String: AnyObject] else {
                return
            }
            // 给其赋值
            user = SHUser(dict: v)

        }else if key == "retweeted_status"{
            // 判断value 是否为nil 而且是否可以转成一个字典
            guard let v = value as? [String: AnyObject] else{
                return
            }
            // 给其赋值
            retweeted_status = SHStatus(dict: v)
            
        }else if key  == "pic_urls" {
            // 判断value 是否为nil  而且是否可以转成一个数组
            guard let v = value as? [[String: AnyObject]] else{
                return
            }
            // 创建一个临时可变数组
            var tempArray:[SHPictureInfo] = [SHPictureInfo]()
            // 遍历数组 字典转模型
            for dic in v {
                // 创建一个模型
                let pic = SHPictureInfo(dict: dic)
                tempArray.append(pic)
            }
            // 对pic_urls 赋值
            pic_urls = tempArray
            
            
        }else {
            // 还需要系统帮我们字典转模型
            super.setValue(value, forKey: key)
        }
    }
    
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {
        
    }
}
// 当前认为是MVC开发模式 在model做处理
extension SHStatus{
    // 格式 来自 xxxx
    func getSourceStr(source: String?)-> NSMutableAttributedString{
        // 判断他是否为nil 而且是否保存">
        guard let s = source where s.containsString("\">") else{
            let str = "上海三期微博"
            return getSourceAttr(str)
        }
        // 起始位置和结束位置
        let startRange = s.rangeOfString("\">")!
        let endRange = s.rangeOfString("</")!
        
        
        // 字符串截取
        let result = s.substringWithRange(startRange.endIndex..<endRange.startIndex)
        return getSourceAttr(result)
    }
    // 处理显示微博来源的富文本
    func getSourceAttr(result: String) -> NSMutableAttributedString {
        // 最终显示格式
        let name = "来自 " + result
        // 得到range
        let range = (name as NSString).rangeOfString("来自")
        
        // 创建一个可变富文本
        let attr = NSMutableAttributedString(string: name)
        // 设置属性
        attr.addAttributes([NSForegroundColorAttributeName: UIColor.grayColor()], range: range)
        
        return attr
    }
}
